Newer
Older
pixi.js / examples / example 15 - Filters / indexAll.html
@Mat Groves Mat Groves on 2 Nov 2013 6 KB All Filter Exampls Added
<!DOCTYPE HTML>
<html>
<head>
	<title>pixi.js example 15 - Filters</title>
	<style>
		body {
			margin: 0;
			padding: 0;
			background-color: #000000;
		}
	</style>
	
	<script src="../../bin/pixi.dev.js"></script>
	<script src="dat.gui.min.js"></script>
	
	<script src="pixi.js"></script>
</head>
<body>
	<script>
	
	var renderer = PIXI.autoDetectRenderer(630, 410);
	renderer.view.style.position = "absolute"
	renderer.view.style.width = window.innerWidth + "px";
	renderer.view.style.height = window.innerHeight + "px";
	renderer.view.style.display = "block";
	
	var filtersSwitchs = [false, false, false, false, false, false, false, false];

	// add render view to DOM
	document.body.appendChild(renderer.view);

	var gui = new dat.GUI({
    //height : 5 * 32 - 1,
    
    width : 350
	});
	
	var blurFilter = new PIXI.BlurFilter();

	var blurFolder = gui.addFolder('Blur');
	blurFolder.add(filtersSwitchs, '0').name("apply");
	blurFolder.add(blurFilter, 'blurX', 0, 32).name("blurX");
	blurFolder.add(blurFilter, 'blurY', 0, 32).name("blurY");

	////
	
	var pixelateFilter = new PIXI.PixelateFilter();

	var pixelateFolder = gui.addFolder('Pixelate');
	pixelateFolder.add(filtersSwitchs, '1').name("apply");
	pixelateFolder.add(pixelateFilter.size, 'x', 1, 32).name("PixelSizeX");
	pixelateFolder.add(pixelateFilter.size, 'y', 1, 32).name("PixelSizeY");

	////

	var invertFilter = new PIXI.InvertFilter();

	var invertFolder = gui.addFolder('Invert');
	invertFolder.add(filtersSwitchs, '2').name("apply");
	invertFolder.add(invertFilter, 'invert', 0, 1).name("Invert");

	////

	var greyFilter = new PIXI.GreyFilter();

	var greyFolder = gui.addFolder('Grey');
	greyFolder.add(filtersSwitchs, '3').name("apply");
	greyFolder.add(greyFilter, 'grey', 0, 1).name("Grey");

	////

	var sepiaFilter = new PIXI.SepiaFilter();

	var sepiaFolder = gui.addFolder('Sepia');
	sepiaFolder.add(filtersSwitchs, '4').name("apply");
	sepiaFolder.add(sepiaFilter, 'sepia', 0, 1).name("Sepia");

	////

	var twistFilter = new PIXI.TwistFilter();

	var twistFolder = gui.addFolder('Twist');
	twistFolder.add(filtersSwitchs, '5').name("apply");
	twistFolder.add(twistFilter, 'angle', 0, 10).name("Angle");
	twistFolder.add(twistFilter, 'radius', 0, 1).name("Radius");
	
	twistFolder.add(twistFilter.offset, 'x', 0, 1).name("offset.x");;
	twistFolder.add(twistFilter.offset, 'y', 0, 1).name("offset.y");;

	////

	var dotScreenFilter = new PIXI.DotScreenFilter();

	var dotScreenFolder = gui.addFolder('DotScreen');
	dotScreenFolder.add(filtersSwitchs, '6').name("apply");
	dotScreenFolder.add(dotScreenFilter, 'angle', 0, 10);
	dotScreenFolder.add(dotScreenFilter, 'scale', 0, 1);

	////

	var colorStepFilter = new PIXI.ColorStepFilter();
	
	var colorStepFolder = gui.addFolder('ColorStep');
	colorStepFolder.add(filtersSwitchs, '7').name("apply");

	colorStepFolder.add(colorStepFilter, 'step', 1, 100);
	colorStepFolder.add(colorStepFilter, 'step', 1, 100);

	var filterCollection = [blurFilter, pixelateFilter, invertFilter, greyFilter, sepiaFilter, twistFilter, dotScreenFilter, colorStepFilter];


	// create an new instance of a pixi stage
	var stage = new PIXI.Stage(0xFFFFFF, true);
	
	

	var pondContainer = new PIXI.DisplayObjectContainer();
	stage.addChild(pondContainer);

	stage.interactive = true;
	
	var bg = PIXI.Sprite.fromImage("displacement_BG.jpg");
	pondContainer.addChild(bg);

	//var fish = PIXI.Sprite.fromImage("displacement_fish2.jpg");//
	//littleDudes.position.y = 100;
	var padding = 100;
	var bounds = new PIXI.Rectangle(-padding, -padding, 630 + padding * 2, 410 + padding * 2)
	var fishs = [];


	for (var i = 0; i < 20; i++) 
	{
		var fishId = i % 4;
		fishId += 1;

		//console.log("displacement_fish"+fishId+".png")
		var fish =  PIXI.Sprite.fromImage("displacement_fish"+fishId+".png");
		fish.anchor.x = fish.anchor.y = 0.5;
		pondContainer.addChild(fish);

		//var direction 
		//var speed = 
		fish.direction = Math.random() * Math.PI * 2;
		fish.speed = 2 + Math.random() * 2;
		fish.turnSpeed = Math.random() - 0.8;

		fish.position.x = Math.random() * bounds.width;
		fish.position.y = Math.random() * bounds.height;
		//fish.speed = new PIXI.Point(0,0)

		fish.scale.x = fish.scale.y = 0.8 + Math.random() * 0.3;
		fishs.push(fish);

	};
	
	var overlay = new PIXI.TilingSprite(PIXI.Texture.fromImage("zeldaWaves.png"), 630, 410);
	overlay.alpha = 0.2
	pondContainer.addChild(overlay);


	var displacementTexture = PIXI.Texture.fromImage("displacement_map.jpg");
	var displacementFilter = new PIXI.DisplacementFilter(displacementTexture);

	
	pondContainer.filters = [displacementFilter];

	

	displacementFilter.scale.x = 50;
	displacementFilter.scale.y = 50;

	

	
	
	
	
	var count = 0;
	var switchy = false;
	
	/*
	 * Add a pixi Logo!
	 */
	var logo = PIXI.Sprite.fromImage("../../logo_small.png")
	stage.addChild(logo);
	
	logo.anchor.x = 1;
	logo.anchor.y = 1;

	logo.position.x = 630
	logo.scale.x = logo.scale.y = 0.5;
	logo.position.y = 400;
	logo.interactive = true;
	logo.buttonMode = true;
	
	logo.click = logo.tap = function()
	{
		window.open("https://github.com/GoodBoyDigital/pixi.js", "_blank")
	}
	
	
	requestAnimFrame(animate);

	function animate() {
		
		count += 0.1;
		
		var blurAmount = Math.cos(count) ;
		var blurAmount2 = Math.sin(count * 0.8)  ;

		var filtersToApply = [];

		for (var i = 0; i < filterCollection.length; i++) {
			
			if(filtersSwitchs[i])filtersToApply.push(filterCollection[i]);
		};

		stage.filters = filtersToApply.length > 0 ? filtersToApply : null;

		for (var i = 0; i < fishs.length; i++) 
		{
			var fish = fishs[i];

			fish.direction += fish.turnSpeed * 0.01;
			fish.position.x += Math.sin(fish.direction) * fish.speed;
			fish.position.y += Math.cos(fish.direction) * fish.speed;

			fish.rotation = -fish.direction - Math.PI/2;

			// wrap..

			if(fish.position.x < bounds.x)fish.position.x += bounds.width;
			if(fish.position.x > bounds.x + bounds.width)fish.position.x -= bounds.width

			if(fish.position.y < bounds.y)fish.position.y += bounds.height;
			if(fish.position.y > bounds.y + bounds.height)fish.position.y -= bounds.height
		}

	
		displacementFilter.offset.x = count * 10//blurAmount * 40;
		displacementFilter.offset.y = count * 10
		
		overlay.tilePosition.x = count * -10//blurAmount * 40;
		overlay.tilePosition.y = count * -10
		
	    renderer.render(stage);
	    requestAnimFrame( animate );
	}

	</script>

	</body>
</html>